# @Time : 2024-11-01 16:06
# @Author : Fioman 
# @Phone : 13149920693
"""
Threading: 直接使用Threading()创建线程,Threading参数介绍
Thread(group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None)
group: 指定线程组,一般设置为None,python未实现
target: 可调用对象,表示线程要执行的目标函数.会在start()被调用时执行该函数
name: 线程的名称,默认情况下会自动分配一个唯一的名称,比如Thread-1
args: 传递给目标函数的位置参数,以元组形式提供
kwargs:传递给目标函数的关键字参数,以字典形式提供
deamon:布尔值,指定是否将线程设置为守护线程,守护线程会在主线程结束时自动终止,不需要显式等待它完成
"""
import threading
import time
from threading import Thread


def print_numbers(start, end, prefix="Number", endfix=" "):
    """
    连续打印一组数字,指定数字开始值,数字结束值,每行打印的前缀,后缀
    :param start:
    :param end:
    :param prefix:
    :param endfix:
    :return:
    """
    for i in range(start, end + 1):
        print(prefix + str(i), end=endfix)
        time.sleep(0.2)


thread = Thread(
    group=None,  # 通常为None,不使用线程组
    target=print_numbers,
    name="NumberPrinter",
    args=(1, 10),
    kwargs={"prefix": "Number", "endfix": "#\n"},
    daemon=True,
)
print(f"启动前线程存活: {thread.is_alive()}")
print(f"当前活动的线程数: {threading.active_count()}")
print(f"活跃线程列表: {threading.enumerate()}")
thread.start()  # 启动线程

# 查看线程是否存活
print(f"启动后线程存活: {thread.is_alive()}")
print(f"当前活动的线程数: {threading.active_count()}")
print(f"活跃线程列表: {threading.enumerate()}")
# 主线程等待线程执行完之后
thread.join()

"""
deamon: 守护线程, thread.setDeamon(True) 或者是创建线程的时候传入参数. 这个线程适合做一些后台任务,
但是不适合做需要完成的任务,因为它会在主线程退出的时候强制结束
"""
